//////////////////////////////////////////////////////////////////////////
//
// NO_Scpe.cpp
//
//////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////
#define NO_TAL_EXPORT

//////////////////////////////////////////////////////////////////////////
#include "NO_Externs.h"
#include "NO_Scope.h"

//////////////////////////////////////////////////////////////////////////
// class NO_TypeFriend definition
//////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////
void		NO_TypeFriend::setID	(NO_Type* b, NO_UInt32 id)	const {b->id = id;}
NO_Type*	NO_TypeFriend::getNext	(const NO_Type* b)			const {return b->next;}
void		NO_TypeFriend::setNext	(NO_Type* b, NO_Type* n)	const {b->next = n;}

//////////////////////////////////////////////////////////////////////////
//
// class NO_Scope definition
//
//////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
// con/destruction
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
NO_Scope::NO_Scope(void){}
NO_Scope::~NO_Scope(void){}

//////////////////////////////////////////////////////////////////////////
// modify
//////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////
NO_Boolean NO_Scope::addType(NO_Type* obj)
{
	NO_UInt32 hash = noGetHash(obj->getID());
	setID(obj, hash);
	if(!first){first = obj;}
	if(last){setNext(last,obj);}
	last = obj;
	return 1;
}

//////////////////////////////////////////////////////////////////////////
// retrieve
//////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////
NO_Type	const * NO_Scope::findTypeImpl(const NO_Int8* n)	const
{
	NO_UInt32 hash = noGetHash(n);
	return findTypeImpl(hash);
}

//////////////////////////////////////////////////////////////////////////
NO_Type const * NO_Scope::findTypeImpl(NO_UInt32 ID)		const
{
	const NO_Type * iter = first;
	while(iter)
	{
		if (iter->getID()==ID){return iter;}
		iter = getNext(iter);
	}
	return 0;
}

//////////////////////////////////////////////////////////////////////////
const NO_Type * NO_Scope::beginTypeImpl	(void)				const{return first;}
const NO_Type * NO_Scope::endTypeImpl	(void)				const{return 0;}
const NO_Type * NO_Scope::nextTypeImpl	(const NO_Type * i) const{return ++i;}

//////////////////////////////////////////////////////////////////////////
//
// class NO_NoneScope definition
//
//////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
// con/destruction
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
NO_NoneScope::NO_NoneScope(void)	{}
NO_NoneScope::~NO_NoneScope(void)	{}

//////////////////////////////////////////////////////////////////////////
// retrieve
//////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////
NO_Type	const * NO_NoneScope::findTypeImpl(NO_Int8 const *)	const {return 0;}
NO_Type const * NO_NoneScope::findTypeImpl(NO_UInt32)		const {return 0;}

//////////////////////////////////////////////////////////////////////////
const NO_Type * NO_NoneScope::beginTypeImpl	(void)				const {return 0;}
const NO_Type * NO_NoneScope::endTypeImpl	(void)				const {return 0;}
const NO_Type * NO_NoneScope::nextTypeImpl	(const NO_Type *)	const {return 0;}


